Estrutura de dados em C -> Pilhas

Publicado por Thiago Gallo 29/10/2004

[ Hits: 26.856 ]

Download palindromo.c




Este é um programinha bem simples pra checar a existencia de um palindromo ( uma palavra ou frase que pode ser lida invertida tendo o mesmo sentido ), exemplo: "O Galo nada no lago".
O programa foi feito para mostrar uma possivel implementacao de pilhas em C.

  



Esconder código-fonte

#include <stdio.h>
#include <string.h>

/////////////////////////////////////////////////////////////
////////////////////////// defines //////////////////////////
/////////////////////////////////////////////////////////////

#define MAX 100          // mudar tamanho da pilha
typedef char TIPO_STACK; // mudar o tipo de pilha

/////////////////////////////////////////////////////////////
///////////////////// variaveis globais /////////////////////
/////////////////////////////////////////////////////////////

TIPO_STACK stack[MAX];
int top = -1;

/////////////////////////////////////////////////////////////
/////////////////// protótipos de funções ///////////////////
/////////////////////////////////////////////////////////////

void pop( TIPO_STACK * );
void push( TIPO_STACK  );

////////////////////////////FUNÇÃO///////////////////////////
//////////////////////////// MAIN ///////////////////////////
/////////////////////////////////////////////////////////////
int main(void)
{
         char fraseOriginal[MAX], fraseInvertida[MAX];
         int i, tamanho;
      
         printf("\n=== Checar existencia de palindromo ===\n\n    Entre com a frase a ser checada \n(sem caracteres especiais e sem espacos) \n\nFrase: ");
         scanf("%s", fraseOriginal);

         //// coloca frase na pilha ////
   
         tamanho = strlen( fraseOriginal );

         for( i = 0; i < tamanho; i++ )
                   push( fraseOriginal[i] );
   
   
          //// tira frase da pilha, agora invertida ////
   
          for( i = 0; i < tamanho; i++ )
                    pop( &fraseInvertida[i] );   
   
      
          fraseInvertida[tamanho] = '{FONTE}'; // finaliza string invertida

          //// mostra frase invertida ////
          printf("Frase Invertida: %s", fraseInvertida);
   
          //// checa se as duas strings sao iguais ////
          if( !strcmp( fraseOriginal, fraseInvertida) )
                     printf("\nResultado: Confere, palindromo existente\n\n");
   
          else
                     printf("\nResultado: Nao confere\n\n");
   
           return ( 0 );
    
} // fim main    

////////////////////////////FUNÇÃO///////////////////////////
/// Nome: pop()                                           ///
/// Descricao: remove elemento da pilha                   ///
/////////////////////////////////////////////////////////////

void pop( TIPO_STACK *elemento )
{
          if( top == -1 ) // pilha vazia
                   printf("\npilha vazia\n");
   
          else {
                    *elemento = stack[top];
                    top--;
          }
   
} // fim funcao

////////////////////////////FUNÇÃO///////////////////////////
/// Nome: push()                                                    ///
/// Descricao: insere elemento na pilha                    ///
//////////////////////////////////////////////////////////////

void push( TIPO_STACK elemento )
{
          if( top == MAX ) // pilha cheia
                    printf("\npilha cheia\n");
   
          else {
      top++;   
                    stack[top] = elemento; 
          }
} // fim funcao

Scripts recomendados

Número perfeito e capicúa ?

Função de hash simples em C

Ordenando números em arquivo

ARQUIVO - parte 1

Jogo da Velha (corrigido)


  

Comentários
[1] Comentário enviado por yurirbraz em 16/01/2008 - 20:31h

Bom exemplo... Mas não é uma pilha. "Uma pilha é um conjunto ordenado de itens no qual novos itens podem ser inseridos e a partir do qual podem ser eliminados itens em uma extremidade chamada topo da pilha."

[2] Comentário enviado por jmwho em 11/05/2022 - 12:56h


#include <stdio.h>
#include <string.h>

#define MAX 100
typedef char TIPO_STACK;

TIPO_STACK stack[MAX];
int top = -1;

void pop(TIPO_STACK *);
void push(TIPO_STACK);

int main(void)
{
system("clear||cls");
char fraseOriginal[MAX], fraseInvertida[MAX];
int i, tamanho;

printf("\n Checar existencia de palindromo\n\n Entre com a frase a ser checada \n (sem caracteres especiais e sem espacos) \n\n Frase: ");
scanf("%[^\n]", fraseOriginal);

tamanho = strlen(fraseOriginal);

for (i = 0; fraseOriginal[i]; i++)
{
fraseOriginal[i] = tolower(fraseOriginal[i]);
}

for (i = 0; i < tamanho; i++)
push(fraseOriginal[i]);

for (i = 0; i < tamanho; i++)
pop(&fraseInvertida[i]);

strcpy(fraseInvertida, fraseOriginal);

// Inverter a palavra copiada
strrev(fraseInvertida);

printf(" Frase Invertida: %s", fraseInvertida);

if (!strcmp(fraseOriginal, fraseInvertida))
printf("\n A palavra e palindroma\n\n");

else
printf("\n A palavra nao e palindroma\n\n");

return (0);
}

void pop(TIPO_STACK *elemento)
{
if (top == -1) // pilha vazia
printf("\n Pilha vazia\n");

else
{
*elemento = stack[top];
top--;
}
}

void push(TIPO_STACK elemento)
{
if (top == MAX) // pilha cheia
printf("\n Pilha cheia\n");

else
{
top++;
stack[top] = elemento;
}
}


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts